{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**_pySpark Basics: Graphing_**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_by Jeff Levy (jlevy@urban.org)_\n",
    "\n",
    "_Last Updated: 31 Jul 2017, Spark v2.1_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_**Abstract:** Spark does not currently have its own graphing abilities, so in this tutorial we will go over several Python options for working with aggregated or subsetted data._\n",
    "\n",
    "_**Main operations used:** Matplotlib, Pandas, collect, toPandas_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dealing with very large data forces us to divide options for plotting into two categories: those that involve an aggregation step first, and those that don't.\n",
    "\n",
    "There are many ways to **aggregate data for plots** (e.g. hexbins, box plots, bar graphs), and when your data is big one beneficial side effect is that aggregating reduces the size.  If the aggregation is enough to allow your data to be loaded into memory then there is no problem; you can use whatever plotting tools you like.  You can download your data to an S3 bucket, or locally to your computer, and make your plots that way.  You can also use the tools Python provides for plotting, which we will go into here.  Even if you're more comfortable with a different program (e.g. Excel, Stata, SAS, Gnuplot, Matlab), you may want to continue in Python rather than downloading since it allows you to generate the graphs in the same platform you use to work with the larger dataset.\n",
    "\n",
    "**Plotting big data without aggregating**, for example in a bivariate scatter plot, gets difficult as your data gets larger.  There are two possible solutions: first, it may be possible to use Amazon Web Services to spin up a single machine with a large amount of memory to work on, for the sole purpose of creating the graph.  The machine itself is likely to be expensive to access, but that may be offset by only needing it very briefly.  There is not currently a system in place for this to happen.  The second option is still untested in Spark, and that is to use the Bokeh DataShader module for Python.  Whether this works in a distributed environment will be the subject of future work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline #tells the Jupyter Notebook to display graphs inline (rather than in a separate window)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loading and Viewing the Data\n",
    "\n",
    "For this example we will use a dataset on diamond attributes and prices.  This is the same data used in the ggplot tutorial for plotting in R.  After we load it we'll take a quick look at what it contains."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "spark_df = spark.read.csv('s3://ui-spark-social-science-public/data/diamonds.csv', inferSchema=True, header=True, sep=',')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-----+-------+-----+-------+-----+-----+-----+----+----+----+\n",
      "|carat|    cut|color|clarity|depth|table|price|   x|   y|   z|\n",
      "+-----+-------+-----+-------+-----+-----+-----+----+----+----+\n",
      "| 0.23|  Ideal|    E|    SI2| 61.5| 55.0|  326|3.95|3.98|2.43|\n",
      "| 0.21|Premium|    E|    SI1| 59.8| 61.0|  326|3.89|3.84|2.31|\n",
      "| 0.23|   Good|    E|    VS1| 56.9| 65.0|  327|4.05|4.07|2.31|\n",
      "| 0.29|Premium|    I|    VS2| 62.4| 58.0|  334| 4.2|4.23|2.63|\n",
      "| 0.31|   Good|    J|    SI2| 63.3| 58.0|  335|4.34|4.35|2.75|\n",
      "+-----+-------+-----+-------+-----+-----+-----+----+----+----+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "spark_df.show(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('carat', 'double'),\n",
       " ('cut', 'string'),\n",
       " ('color', 'string'),\n",
       " ('clarity', 'string'),\n",
       " ('depth', 'double'),\n",
       " ('table', 'double'),\n",
       " ('price', 'int'),\n",
       " ('x', 'double'),\n",
       " ('y', 'double'),\n",
       " ('z', 'double')]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark_df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-------+------------------+------------------+------------------+-----------------+\n",
      "|summary|             carat|             depth|             table|            price|\n",
      "+-------+------------------+------------------+------------------+-----------------+\n",
      "|  count|             53940|             53940|             53940|            53940|\n",
      "|   mean|0.7979397478679852| 61.74940489432624| 57.45718390804603|3932.799721913237|\n",
      "| stddev|0.4740112444054196|1.4326213188336525|2.2344905628213247|3989.439738146397|\n",
      "|    min|               0.2|              43.0|              43.0|              326|\n",
      "|    max|              5.01|              79.0|              95.0|            18823|\n",
      "+-------+------------------+------------------+------------------+-----------------+\n",
      "\n"
     ]
    }
   ],
   "source": [
    "spark_df.describe(['carat', 'depth', 'table', 'price']).show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If necessary we could first subset the data to make it small enough to handle with standard tools, for example by dropping certain columns, taking a random sampling, and so on (see the `subsetting` tutorial)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using Matplotlib\n",
    "\n",
    "There are many graphing solutions in Python, but the most common one by far is Matplotlib.  It is very flexible; literally every aspect of a graph can be manipulated and fine-tuned if desired.  **This can make it a great tool, but that same flexibility often leads to complex and verbose code.**  The Python plotting environment is not as well-developed as in R, for example, with ggplot.  \n",
    "\n",
    "We will start with a very simple example that uses only a bare minimum of the things Matplotlib can do, and let it otherwise fill in default settings for us.  Remember, in order to graph in Matplotlib our data cannot be distributed; it must be small enough to be collected.  Therefore, we begin by extracting the values of the two columns we want to plot directly from the Spark dataframe:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "carat = spark_df[['carat']].collect()\n",
    "price = spark_df[['price']].collect()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using `collect` has technically loaded into memory two lists of row objects that only have one entry each (`carat` in one and `price` in the other).  We could convert these to plain Python lists if we wanted, but Matplotlib knows how to work with these, so there's no need.  Take a look at the first five entries of each, to get an idea:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Row(carat=0.23), Row(carat=0.21), Row(carat=0.23), Row(carat=0.29), Row(carat=0.31)]\n",
      "[Row(price=326), Row(price=326), Row(price=327), Row(price=334), Row(price=335)]\n"
     ]
    }
   ],
   "source": [
    "print(carat[:5])\n",
    "print(price[:5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Matplotlib leverages the object-oriented nature of Python by creating objects that we then manipulate properties for.  To start, we first define a **figure object**, named `fig`, then create one or more **subplots** inside of the figure by defining an **axis object**, named `ax`, that points to the single subplot in our figure.\n",
    "\n",
    "Each figure can have one or more subplots within it, arranged according to the `fig.add_subplot(a,b,c)` line below.  Here, `'a'` defines how many rows (of plots) your figure has, `'b'` defines how many columns, and `'c'` defines which plot within the figure the axis object points to.  By passing `'1,1,1'` as we do below, we tell it the figure has 1 row, 1 column, and that we want to work with the 1st (and in this case only) subplot out of those:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzBlN2AgJ5cIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe330776b50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()           #an empty figure\n",
    "ax = fig.add_subplot(1,1,1)  #a single subplot within the figure"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Which as you can see is currently an empty figure, because we haven't given it any data or settings.  Note that each time a figure is displayed or saved, Matplotlib clears the queue and we need to define it again.\n",
    "\n",
    "If we wanted, say, four different plots to show up, one in each corner of the figure, we would create four subplots, each with its own axis pointer, and tell it to have 2 rows, 2 columns, and then number the plots 1-4.  We could then set attributes on the entire figure by modifying properties of `fig`, or on each individual plot by modifying attributes on `ax1`, `ax2`, `ax3`, or `ax4`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7fe326cf5510>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe326d1d8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax1 = fig.add_subplot(2,2,1) #a 2x2 grid of plots, plot 1\n",
    "ax2 = fig.add_subplot(2,2,2) #plot 2\n",
    "ax3 = fig.add_subplot(2,2,3) #plot 3\n",
    "ax4 = fig.add_subplot(2,2,4) #plot 4\n",
    "\n",
    "fig.suptitle('Title for the Figure')\n",
    "ax1.set_title('Title for the First Subplot')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is an enormous number of figure and axis methods that can be used.  You can see above that we added a title to the figure and a title to one subplot, just as simple examples, though we won't go into very many of the others that can be done in this tutorial.  \n",
    "\n",
    "To give some data to our graph we'll use the `plot` method on an axis, followed by adding a few labels.  By passing it as the first argument of `plot()`, we put `carat` on the x-axis and then the second argument, `price` on the y-axis.\n",
    "\n",
    "The third argument, `'go'`, is a format string that has two components; **the first letter is the color, the second is the marker style.**  In this case, the `g` is for green and the `o` is for dots.  There are many more.  For a few example combinations, `'b--'` would be blue with a solid line connecting them, `'r-'` would be red with a dashed line, `'k^'` is black triangles, and `'ys'` is yellow squares.\n",
    "\n",
    "The `alpha` argument sets the level of transparency - it can be interpreted as the number of overlapping observations necessary to achieve the maximum opacity value of 1.  For the value `alpha=0.1` then, ten overlaps will equal full color."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7fe326a76d90>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe326d063d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(1,1,1)\n",
    "\n",
    "ax.plot(carat, price, 'go', alpha=0.1)\n",
    "ax.set_xlabel('Carat')\n",
    "ax.set_ylabel('Price')\n",
    "ax.set_title('Diamonds')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using Pandas\n",
    "\n",
    "Plotting in Python can be simplified if you first turn your Spark dataframe into a **Pandas** dataframe.  In addition to Pandas convenient plotting tools, this also gives you access to many other dataframe manipulations similar to the R language.  Note once again that you can only use Panads on datasets small enough to fit on one system; like native R dataframes, they do not support a distributed environment.  Therefore you may need to subset a large distributed Spark dataframe before it can be loaded and worked with this way.  As with Matplotlib, Pandas can easily handle our diamonds dataset however.\n",
    "\n",
    "**R, Pandas, pySpark and SparkR all share a lineage**, and while there are differences that can trip you up when going between them there are also a lot of similarities that will ease transitions back and forth.\n",
    "\n",
    "**Spark dataframes have a built-in method to turn themselves into Pandas dataframes:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>carat</th>\n",
       "      <th>depth</th>\n",
       "      <th>table</th>\n",
       "      <th>price</th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "      <th>z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "      <td>53940.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.797940</td>\n",
       "      <td>61.749405</td>\n",
       "      <td>57.457184</td>\n",
       "      <td>3932.799722</td>\n",
       "      <td>5.731157</td>\n",
       "      <td>5.734526</td>\n",
       "      <td>3.538734</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.474011</td>\n",
       "      <td>1.432621</td>\n",
       "      <td>2.234491</td>\n",
       "      <td>3989.439738</td>\n",
       "      <td>1.121761</td>\n",
       "      <td>1.142135</td>\n",
       "      <td>0.705699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.200000</td>\n",
       "      <td>43.000000</td>\n",
       "      <td>43.000000</td>\n",
       "      <td>326.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>56.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>4.710000</td>\n",
       "      <td>4.720000</td>\n",
       "      <td>2.910000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.700000</td>\n",
       "      <td>61.800000</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>2401.000000</td>\n",
       "      <td>5.700000</td>\n",
       "      <td>5.710000</td>\n",
       "      <td>3.530000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.040000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>5324.250000</td>\n",
       "      <td>6.540000</td>\n",
       "      <td>6.540000</td>\n",
       "      <td>4.040000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>5.010000</td>\n",
       "      <td>79.000000</td>\n",
       "      <td>95.000000</td>\n",
       "      <td>18823.000000</td>\n",
       "      <td>10.740000</td>\n",
       "      <td>58.900000</td>\n",
       "      <td>31.800000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              carat         depth         table         price             x  \\\n",
       "count  53940.000000  53940.000000  53940.000000  53940.000000  53940.000000   \n",
       "mean       0.797940     61.749405     57.457184   3932.799722      5.731157   \n",
       "std        0.474011      1.432621      2.234491   3989.439738      1.121761   \n",
       "min        0.200000     43.000000     43.000000    326.000000      0.000000   \n",
       "25%        0.400000     61.000000     56.000000    950.000000      4.710000   \n",
       "50%        0.700000     61.800000     57.000000   2401.000000      5.700000   \n",
       "75%        1.040000     62.500000     59.000000   5324.250000      6.540000   \n",
       "max        5.010000     79.000000     95.000000  18823.000000     10.740000   \n",
       "\n",
       "                  y             z  \n",
       "count  53940.000000  53940.000000  \n",
       "mean       5.734526      3.538734  \n",
       "std        1.142135      0.705699  \n",
       "min        0.000000      0.000000  \n",
       "25%        4.720000      2.910000  \n",
       "50%        5.710000      3.530000  \n",
       "75%        6.540000      4.040000  \n",
       "max       58.900000     31.800000  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pandas_df = spark_df.toPandas()\n",
    "pandas_df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that this is formatted very nicely because Jupyter is designed specifically to work well with Pandas.  It is not as automatically familiar with pySpark dataframes.\n",
    "\n",
    "**What does the relationship between `clarity` and `price` look like?**  We'll use a bar graph to take a look.  First we group the Pandas dataframe by `clarity`, then we ask it to aggregate `price` by its `mean`.  This line should look mostly familiar if you have been through the earlier pySpark tutorials.\n",
    "\n",
    "Note that we add `reset_index` to the end because we need to treat `clarity` as a column, not an index, and Pandas by default makes the groupby category an index.  PySpark dataframes do not have indicies, but Pandas dataframes cannot be without them; when we tell `clarity` to be a column again instead of an index Pandas just fills in an index of integers from 0 on up by default.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "grouped = pandas_df.groupby('clarity').agg({'price':'mean'}).reset_index()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we were **aggregating multiple columns by different operations** we could simply pass more entries into the dictionary for `agg()`, e.g.:\n",
    "\n",
    "    .agg({'price:'mean', 'table':'min', 'depth':'max'})\n",
    "\n",
    "Or if we were applying **the same aggregation operation to all numerical columns**, then replacing `.agg(...)` with `.mean()` would be a convenience for:\n",
    "\n",
    "    .agg({'carat':'mean', 'depth':'mean', 'table':'mean', 'price':'mean', 'x':'mean', 'y':'mean', 'z':'mean'})\n",
    "\n",
    "I won't go into a line-by-line breakdown of this next code block, but suffice to say it's all to **force the x-axis of our bar graph into the order we specify** in `clarity_order`.  **We know** that diamond clarity ratings do have a cardinal ordering, but there is **nothing in the dataset to tell us this automatically** so we have to define it.  This wouldn't be necessary if there was a clear way to sort the columns, for example by alphabetical or numerical order, or if we didn't want them sorted at all."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#in order from greatest clarity to least:\n",
    "clarity_order = ['FL', 'IF', 'VVS1', 'VVS2', 'VS1', 'VS2', 'SI1', 'SI2', 'I1', 'I2', 'I3']\n",
    "mapping = {day: i for i, day in enumerate(clarity_order)}\n",
    "key = grouped['clarity'].map(mapping)\n",
    "grouped = grouped.iloc[key.argsort()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once our data is ready we just use the convient `plot` method that Pandas dataframes have:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fe326c64210>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe326cbbe90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "grouped.plot(kind='bar', x='clarity', legend=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pandas and Matplotlib Together\n",
    "\n",
    "If the default formatting of the Pandas graph looks a lot like the Matplotlib graph we created earlier, it should; Pandas plotting is built on Matplotlib.  It just handles a lot of the more verbose parts of Matplotlib in the background for us.\n",
    "\n",
    "In fact we can even use them together, if we want the convenience of Pandas automatic plotting with the ability to alter every last detail that Matplotlib provides.  First we use the Pandas `plot` method to *assign an axis object* (`ax`), rather than calling it without assigning it to anything as we did above.\n",
    "\n",
    "Pandas will then handle all the default formatting of the axis for us, allowing us to override whatever features we want afterword.  In this case we set the labels and titles; you can see it's otherwise the same graph as above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7fe326782a50>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe332fe8f50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#same line as in the previous code block, only beginning with \"ax =\"\n",
    "ax = grouped.plot(kind='bar', x='clarity', legend=False)\n",
    "\n",
    "#then we set some options using Matplotlib commands\n",
    "ax.set_xlabel('Clarity')\n",
    "ax.set_ylabel('Price')\n",
    "ax.set_title('Diamonds')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Misc\n",
    "\n",
    "Jupyter notebooks automatically display our figure for us when a codeblock that creates one is executed; this is a convenience that is due to the `%matplotlib inline` \"magic\" function that we called at the top of the notebook.  Normally after our figure is ready we must call `plt.show()` to see the graph.\n",
    "\n",
    "Along these lines, if we want to save a figure we can call `plt.savefig(<path to an S3 bucket>)` once it's created.  It is also possible to right-click on an image once Jupyter displays it and save it locally to your computer, though if you're creating many graphs, for example inside of a loop, this may not be practical.\n",
    "\n",
    "A few references for making your Matplotlib graphs even nicer:\n",
    "\n",
    "   **Text on Matplotlib graphs:** http://matplotlib.org/users/text_intro.html\n",
    "   \n",
    "   **Creating beautiful graphs:** http://www.randalolson.com/2014/06/28/how-to-make-beautiful-data-visualizations-in-python-with-matplotlib/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
